package com.yuanshen.equip.enums;


import com.alibaba.excel.util.StringUtils;

/**
 * 总词条类型
 *
 * @author Administrator
 * @date 2023/2/9 14:28
 */
public enum PropertyType {

    /**
     * 生命值
     */
    HP("生命值", "HP"),

    /**
     * 生命值百分比
     */
    PERCENTAGE_OF_HP("生命值百分比", "Percentage_OF_HP"),

    /**
     * 防御力
     */
    DEFENSE("防御力", "DEFENSE"),

    /**
     * 防御力百分比
     */
    PERCENTAGE_OF_DEFENSE("防御力百分比", "Percentage_OF_DEFENSE"),

    /**
     * 攻击力
     */
    ATTACK_POWER("攻击力", "ATTACK_POWER"),

    /**
     * 攻击力百分比
     */
    PERCENTAGE_OF_ATTACK_POWER("攻击力百分比", "Percentage_OF_ATTACK_POWER"),

    /**
     * 元素精通
     */
    ELEMENT_PROFICIENT("元素精通", "ELEMENT_PROFICIENT"),

    /**
     * 元素充能效率
     */
    ELEMENT_CHARGE("元素充能效率", "ELEMENT_CHARGE"),

    /**
     * 爆击率
     */
    CRITICAL_STRIKE_RATE("暴击率", "CRITICAL_STRIKE_RATE"),

    /**
     * 暴击伤害
     */
    CRITICAL_DAMAGE("暴击伤害", "CRITICAL_DAMAGE"),

    /**
     * 治疗加成
     */
    TREATMENT_UP("治疗加成", "TREATMENT_UP"),

    /**
     * 物理伤害加成
     */
    PHYSICAL_DAMAGE_UP("物理伤害加成", "PHYSICAL_DAMAGE_UP"),

    /**
     * 风元素伤害加成
     */
    WIND_ELEMENT_DAMAGE_UP("风元素伤害加成", "WIND_ELEMENT_DAMAGE_UP"),

    /**
     * 火元素伤害加成
     */
    FIRE_ELEMENT_DAMAGE_UP("火元素伤害加成", "FIRE_ELEMENT_DAMAGE_UP"),

    /**
     * 雷元素伤害加成
     */
    RAY_ELEMENT_DAMAGE_UP("雷元素伤害加成", "RAY_ELEMENT_DAMAGE_UP"),

    /**
     * 水元素伤害加成
     */
    WATER_ELEMENT_DAMAGE_UP("水元素伤害加成", "WATER_ELEMENT_DAMAGE_UP"),

    /**
     * 岩元素伤害加成
     */
    ROCK_ELEMENT_DAMAGE_UP("岩元素伤害加成", "ROCK_ELEMENT_DAMAGE_UP"),

    /**
     * 草元素伤害加成
     */
    GRASS_ELEMENT_DAMAGE_UP("草元素伤害加成", "GRASS_ELEMENT_DAMAGE_UP"),

    /**
     * 冰元素伤害加成
     */
    ICE_ELEMENT_DAMAGE_UP("冰元素伤害加成", "ICE_ELEMENT_DAMAGE_UP");


    private String name;

    private String code;


    PropertyType(String name, String code) {
        this.name = name;
        this.code = code;
    }


    public String getName() {
        return this.name;
    }

    public String getCode() {
        return this.code;
    }

    /**
     * 解析
     *
     * @param code 代码
     * @return {@link PropertyType}
     */
    public static PropertyType parse(String code) {
        for (PropertyType item : PropertyType.values()) {
            if (StringUtils.equals(item.getCode(), code)) {
                return item;
            }
        }

        return null;
    }


    /**
     * 相等
     *
     * @param propertyType
     * @return boolean
     */
    public boolean equal(PropertyType propertyType) {
        if (StringUtils.equals(name, propertyType.getName()) && StringUtils.equals(code, propertyType.getCode())) {
            return true;
        }

        return false;
    }
}
